home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / DJSRC106.ARJ / EVENTQUE.H < prev    next >
Text File  |  1992-04-13  |  5KB  |  144 lines

  1. /**
  2.  ** EVENTQUE.H
  3.  **  Include file for an interrupt-driven mouse and keyboard event queue
  4.  **  mechanism for Turbo C and DJGPP (under MS DOS of course)
  5.  **
  6.  **  Copyright (C) 1992, Csaba Biegl
  7.  **    [820 Stirrup Dr, Nashville, TN, 37221]
  8.  **    [csaba@vuse.vanderbilt.edu]
  9.  **
  10.  **  This program is free software; you can redistribute it and/or modify
  11.  **  it under the terms of the GNU General Public License as published by
  12.  **  the Free Software Foundation.
  13.  **
  14.  **  This program is distributed in the hope that it will be useful,
  15.  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  **  GNU General Public License for more details.
  18.  **
  19.  **  You should have received a copy of the GNU General Public License
  20.  **  along with this program; if not, write to the Free Software
  21.  **  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  **/
  23.  
  24. #ifndef _EVENTQUE_H_
  25. #define _EVENTQUE_H_
  26.  
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif
  30.  
  31. /*
  32.  * structures:
  33.  *  BE CAREFUL when hacking!!! -- 16 and 32 bit compilers have to generate
  34.  *  the same alignments
  35.  */
  36. typedef struct {
  37.     unsigned char   evt_type;        /* event type: 0: keyboard, 1: mouse */
  38.     unsigned char   evt_kbstat;        /* keyboard status (ALT, SHIFT, etc..) */
  39.     unsigned char   evt_mask;        /* mouse event mask */
  40.     unsigned char   evt_button;        /* button status */
  41.     unsigned short  evt_xpos;        /* X coord (or keycode if keybd event) */
  42.     unsigned short  evt_ypos;        /* Y coord */
  43.     unsigned long   evt_time;        /* time stamp of event */
  44. #define evt_keycode evt_xpos        /* reuse this slot for keybd events !! */
  45. } EventRecord;
  46.  
  47. typedef struct {
  48.     unsigned short  evq_maxsize;    /* max size of event queue */
  49.     unsigned short  evq_cursize;    /* number of events in the queue */
  50.     unsigned short  evq_rdptr;        /* next event to read */
  51.     unsigned short  evq_wrptr;        /* next event to be written */
  52.     short        evq_xpos;        /* current X coordinate of mouse */
  53.     short        evq_ypos;        /* current Y coordinate of mouse */
  54.     short        evq_xmin;        /* minimal mouse X coordinate */
  55.     short        evq_ymin;        /* minimal mouse Y coordinate */
  56.     short        evq_xmax;        /* maximal mouse X coordinate */
  57.     short        evq_ymax;        /* maximal mouse Y coordinate */
  58.     short        evq_xspeed;        /* horizontal speed (mickey/coord) */
  59.     short        evq_yspeed;        /* vertical speed (mickey/coord) */
  60.     unsigned short  evq_thresh;        /* fast movement threshold */
  61.     unsigned short  evq_accel;        /* multiplier for fast move */
  62.     unsigned char   evq_drawmouse;  /* interrupt handler has to draw mouse */
  63.     unsigned char   evq_moved;        /* set if mouse moved */
  64.     unsigned char   evq_delchar;    /* character removed from BIOS buffer */
  65.     unsigned char   evq_enable;        /* event generation control flag */
  66.     EventRecord        evq_events[1];  /* event buffer space */
  67. } EventQueue;
  68.  
  69. /*
  70.  * event types
  71.  */
  72. #define EVENT_KEYBD    0
  73. #define EVENT_MOUSE    1
  74.  
  75. /*
  76.  * MOUSE event flag bits
  77.  * (also defined in "mousex.h" of the graphics library)
  78.  */
  79. #ifndef M_MOTION
  80.  
  81. #define M_MOTION    0x001
  82. #define M_LEFT_DOWN    0x002
  83. #define M_LEFT_UP    0x004
  84. #define M_RIGHT_DOWN    0x008
  85. #define M_RIGHT_UP    0x010
  86. #define M_MIDDLE_DOWN    0x020
  87. #define M_MIDDLE_UP    0x040
  88. #define M_BUTTON_DOWN    (M_LEFT_DOWN | M_MIDDLE_DOWN | M_RIGHT_DOWN)
  89. #define M_BUTTON_UP    (M_LEFT_UP   | M_MIDDLE_UP   | M_RIGHT_UP)
  90. #define M_BUTTON_CHANGE (M_BUTTON_UP | M_BUTTON_DOWN )
  91.  
  92. /*
  93.  * MOUSE button status bits
  94.  */
  95. #define M_LEFT        1
  96. #define M_RIGHT        2
  97. #define M_MIDDLE    4
  98.  
  99. #endif  /* M_MOTION */
  100.  
  101. /*
  102.  * KEYBOARD status word bits
  103.  * (also defined in "mousex.h" of the graphics library)
  104.  */
  105. #ifndef KB_SHIFT
  106.  
  107. #define KB_RIGHTSHIFT    0x01        /* right shift key depressed */
  108. #define KB_LEFTSHIFT    0x02        /* left shift key depressed */
  109. #define KB_CTRL        0x04        /* CTRL depressed */
  110. #define KB_ALT        0x08        /* ALT depressed */
  111. #define KB_SCROLLOCK    0x10        /* SCROLL LOCK active */
  112. #define KB_NUMLOCK    0x20        /* NUM LOCK active */
  113. #define KB_CAPSLOCK    0x40        /* CAPS LOCK active */
  114. #define KB_INSERT    0x80        /* INSERT state active */
  115.  
  116. #define KB_SHIFT    (KB_LEFTSHIFT | KB_RIGHTSHIFT)
  117.  
  118. #endif  /* KB_SHIFT */
  119.  
  120. /*
  121.  * set this bit in 'evq_enable' to generate the corresponding event
  122.  */
  123. #define EVENT_ENABLE(type)    (1 << (type))
  124.  
  125. /*
  126.  * prototypes
  127.  */
  128. #if defined(__TURBOC__) && defined(FOR_GO32)
  129. EventQueue *EventQueueInit(int qsize,int ms_stksize,void (*msdraw)(void),int,int);
  130. #else
  131. EventQueue *EventQueueInit(int qsize,int ms_stksize,void (*msdraw)(void));
  132. #endif
  133.  
  134. void   EventQueueDeInit(void);
  135. int    EventQueueNextEvent(EventQueue *q,EventRecord *e);
  136.  
  137. #ifdef __cplusplus
  138. }
  139. #endif
  140.  
  141. #endif /* whole file */
  142.  
  143.  
  144.